package cn.b.sky.mes.pp.dao;

import java.util.List;
import java.util.Map;
import java.util.Set;

import cn.b.sky.mes.pp.model.ProductOrder;
import cn.b.sky.mes.pp.model.ProductionOrder;
import cn.b.sky.mes.pp.model.condition.ProductionOrderCondition;
import org.apache.ibatis.annotations.Param;

public interface ProductionOrderDao {

  /**
   * 
   * <strong>Title : selectProductionOrdersByCondition<br></strong>
   * <strong>Description : </strong>分页查询生产订单<br> 
   * <strong>Create on : 2015-10-8 下午6:40:20<br></strong>
   * <p>
   * @return
   * List<ProdcutionOrder>
   * @throws 
   * @author lidapeng<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  public List<ProductionOrder> selectProductionOrdersByCondition(ProductionOrderCondition condition);

  /**
   * 
   * <strong>Title : selectProductionOrderCount<br></strong>
   * <strong>Description : </strong>@方法注释说明写在此处@<br> 
   * <strong>Create on : 2015-10-8 下午8:04:13<br></strong>
   * <p>
   * @param condition
   * @return
   * int
   * @throws 
   * @author lidapeng<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  public int selectProductionOrderCount(ProductionOrderCondition condition);

  /**
   * 
   * <strong>Title : insertProductionOrder<br></strong>
   * <strong>Description : </strong>保存<br> 
   * <strong>Create on : 2015-10-8 下午7:28:22<br></strong>
   * <p>
   * @param order
   * void
   * @throws 
   * @author lidapeng<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  public void insertProductionOrder(ProductionOrder order);

  /**
   * 
   * <strong>Title : selectProductionOrdersByPk<br></strong>
   * <strong>Description : </strong>查询<br> 
   * <strong>Create on : 2015-10-8 下午7:30:14<br></strong>
   * <p>
   * @param siteCode
   * @param productionOrderNum
   * @return
   * ProductionOrder
   * @throws 
   * @author lidapeng<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  public ProductionOrder selectProductionOrdersByPk(@Param("siteCode") String siteCode,
      @Param("productionOrderNum") String productionOrderNum);

  /**
   *
   * <strong>Title : selectOrderCompletedQuantity<br></strong>
   * <strong>Description : </strong>查询生产订单完工、报废数量<br>
   * <strong>Create on : 2015-10-12 下午04:07:16<br></strong>
   * <p>
   * @param siteCode
   * @param productionOrderNum
   * @return
   * ProductionOrder
   * @throws
   * @author zhaoxin01<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  ProductionOrder selectOrderCompletedQuantity(@Param("siteCode") String siteCode,
                                               @Param("productionOrderNum") String productionOrderNum);
  /**
   * 
   * <strong>Title : updateProductionOrder<br></strong>
   * <strong>Description : </strong>修改<br> 
   * <strong>Create on : 2015-10-8 下午7:31:27<br></strong>
   * <p>
   * @param order
   * void
   * @throws 
   * @author lidapeng<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  public void updateProductionOrder(ProductionOrder order);

  /**
   * 
   * <strong>Title : updateNoCreateProductionOrder<br></strong>
   * <strong>Description : </strong>修改非创建状态的订单<br> 
   * <strong>Create on : 2016-5-20 上午9:48:59<br></strong>
   * <p>
   * @param order
   * void
   * @throws 
   * @author lidapeng<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  public void updateNoCreateProductionOrder(ProductionOrder order);

  /**
   * 
   * <strong>Title : deleteProductionOrdeByPK<br></strong>
   * <strong>Description : </strong>删除<br> 
   * <strong>Create on : 2015-10-8 下午7:39:55<br></strong>
   * <p>
   * @param siteCode
   * @param productionOrderNum
   * void
   * @throws 
   * @author lidapeng<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  public void deleteProductionOrdeByPK(@Param("siteCode") String siteCode,
      @Param("productionOrderNum") String productionOrderNum);

  /**
   * 
   * <strong>Title : selectUncompletedProductionOrders<br></strong>
   * <strong>Description : </strong>获取未生产完的订单列表<br> 
   * <strong>Create on : 2016年1月18日 下午6:40:28<br></strong>
   * <p>
   * @param condition
   * @return
   * List<ProductionOrder>
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  public List<ProductionOrder> selectUncompletedProductionOrders(ProductionOrderCondition condition);

  /**
   * 
   * <strong>Title : getUnarrangedProductionOrdersCount<br></strong>
   * <strong>Description : </strong>获取未生产完的订单列表数量<br> 
   * <strong>Create on : 2016年1月18日 下午6:40:58<br></strong>
   * <p>
   * @param condition
   * @return
   * int
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  public int getUncompletedProductionOrdersCount(ProductionOrderCondition condition);

  /**
   * 
   * <strong>Title : selectProductOrdersByProductOrderNum<br></strong>
   * <strong>Description : </strong><br> 
   * <strong>Create on : 2016-1-19 上午9:19:29<br></strong>
   * <p>
   * @param siteCode
   * @param productOrderNum
   * @return
   * List<ProductionOrder>
   * @throws 
   * @author lidapeng<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  public List<ProductionOrder> selectProductOrdersByProductOrderNum(@Param("siteCode") String siteCode,
      @Param("productOrderNum") String productOrderNum);

  /**
   * 
   * <strong>Title : closeProductionOrderByProductOrder<br></strong>
   * <strong>Description : </strong>关闭产品下面的生产订单<br> 
   * <strong>Create on : 2016-1-19 下午2:28:58<br></strong>
   * <p>
   * @param order
   * void
   * @throws 
   * @author lidapeng<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  public void closeProductionOrderByProductOrder(ProductOrder order);

  /**
   * 
   * <strong>Title : closeProductionOrderByPk<br></strong>
   * <strong>Description : </strong>关闭单个生产订单<br> 
   * <strong>Create on : 2016-1-19 下午4:28:45<br></strong>
   * <p>
   * @param order
   * @throws 
   * @author lidapeng<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  public void closeProductionOrder(ProductionOrder order);

  /**
   * 
   * <strong>Title : selectUnClosedProductionOrdersByProductOrderNum<br></strong>
   * <strong>Description : </strong>查询产品订单下未关闭的生产订单<br> 
   * <strong>Create on : 2016-2-16 下午2:32:17<br></strong>
   * <p>
   * @param siteCode
   * @param productOrderNum
   * @param value
   * @return
   * List<ProductionOrder>
   * @throws 
   * @author lidapeng<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  public List<ProductionOrder> selectUnClosedProductionOrdersByProductOrderNum(@Param("siteCode") String siteCode,
      @Param("productOrderNum") String productOrderNum, @Param("statusECode") String statusECode);

  /**
   * 
   * <strong>Title : selectOrderCountByStatusSet<br></strong>
   * <strong>Description : </strong>查询产品订单下的指定状态集合的生产订单数量<br> 
   * <strong>Create on : 2016年5月17日 上午10:18:36<br></strong>
   * <p>
   * @param siteCode 工厂
   * @param productOrderNum 产品订单号
   * @param statusSet 状态集合
   * @return
   * int
   * @throws 
   * @author zhaoxin01<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  public int selectOrderCountByStatusSet(@Param("siteCode") String siteCode,
      @Param("productOrderNum") String productOrderNum, @Param("statusSet") List<String> statusSet);

  /**
   * 
   * <strong>Title : getProductionOrdersCountByStatus<br></strong>
   * <strong>Description : </strong>根据条件查询订单各个状态的数量<br> 
   * <strong>Create on : 2016年7月27日 上午11:25:34<br></strong>
   * <p>
   * @param condition
   * @return
   * Set<Integer>
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  public Set<Map<String, Object>> getProductionOrdersCountByStatus(ProductionOrderCondition condition);

  /**
   * 
   * <strong>Title : getUncompletedCount<br></strong>
   * <strong>Description : </strong>获取未完工数量，统计模块使用<br> 
   * <strong>Create on : 2016年7月27日 下午5:44:26<br></strong>
   * <p>
   * @param condition
   * @return
   * int
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  int getUncompletedCount(ProductionOrderCondition condition);

}
